4 - 1.4 IPC: Ein- und Ausgabe [ID:22435]
50 von 108 angezeigt

Nachdem wir uns nun angeschaut haben, wie wir die Netzwerkkommunikation mit einem Server

initiieren können, wollen wir uns noch anschauen, wie wir nun tatsächlich Daten übertragen

können bzw. Daten empfangen können.

Je nachdem, wie viel Kontrolle wir über die Netzwerkkommunikation haben wollen, stehen

uns verschiedene Funktionen zur Verfügung.

Wir haben zum einen die Direktesystemaufruf Schnittstelle, die uns das Betriebssystem

bietet.

Über die können wir mit den Datei-Deskriptoren arbeiten, wobei der Datei-Deskriptor hier

der Socket-Deskriptor ist, da sich Sockets genauso verwenden lassen wie Datei-Deskriptoren.

Oder aber wir greifen auf Bibliotheksfunktionen zurück, die zwar eine weitere Interaktionsstufe

einführen, uns aber dafür Komfortfunktionen bieten, die die Kommunikation vereinfachen.

Wenn wir nun auf Ebene 2 der System-Schnittstelle bleiben wollen, dann können wir die blockorientierten

Funktionen Read und Write verwenden, die direkt mit dem Betriebssystem interagieren.

Hier können wir Blöcke einer spezifizierten Länge entweder lesen oder schreiben.

Mit den flexibleren Bibliotheksfunktionen können wir zusätzlich auch zeichenorientiert

oder zeilenorientiert arbeiten.

Wir können sogar Formatierungen in Form von Formatstrings mit einarbeiten.

Die Funktionen können wir jedoch nicht sofort benutzen.

Stattdessen müssen wir auf Basis des Socket-Deskriptors bzw. des Datei-Deskriptors erst eine Dateiabstraktion

öffnen, nämlich den File-Pointer.

Mit dem File-Pointer können wir nun Funktionen wie fRead, fGets oder fScanf verwenden.

Blockorientiert bedeutet auch hier wieder, dass wir Blöcke einer angegebenen Länge

entweder lesen oder schreiben, während zeichenorientiert bedeutet, dass wir einzelne Zeichen lesen

und einzelne Zeichen schreiben.

Zeilenorientiert bedeutet, dass bis zum Ende eines Strings oder einer Zeile, die durch

ein Backslash-n beendet wird, gelesen wird.

Die Formatierung bezieht sich auf Formatstrings, wie ihr sie schon aus der Printf-Funktion

kennt.

Hier können z.B. Zahlen in Strings konvertiert werden oder eben andersrum.

Nachdem die Dateistromabstraktion der Bibliotheksfunktion deutlich einfacher zu verwenden ist, wollen

wir uns nun anschauen, wie wir diese verwenden können.

Zunächst einmal müssen wir uns ein File-Objekt erstellen.

Und dies geht, indem wir mit dem vorhandenen Dateideskripto die fDOpen-Funktion aufrufen.

Diese erwartet als erstes Argument eben den Deskripto und als zweites Argument einen Modus,

in dem die Datei geöffnet wird.

Der Modus ist ein String, der aus einer Buchstabenkombination besteht.

Wir können in dem String entweder schreiben R für lesenden Zugriff, W für schreibenden

oder A, um am Ende der Datei anzuhängen.

Zusätzlich können wir noch das Pluszeichen mit verwenden, wenn wir sowohl lesend als

auch schreibend auf den Deskripto zugreifen wollen.

Dabei ist zu beachten, dass der Deskripto beim Initialen Öffnen ebenfalls mit den Rechten

geöffnet worden sein muss.

Dies betrifft vor allem den Zugriff auf Dateien, da diese mit dem OpenSystemCall ebenfalls

so geöffnet werden, dass ein Dateideskripto der Rückgabewert ist.

Der Rückgabewert der fDOpen-Funktion ist nun ein Zeiger auf ein File-Objekt.

Diesen können wir für die zuvor genannten Funktionen verwenden, wie z.B.

fprintf.

Sobald wir mit der Kommunikation fertig sind, müssen wir den FilePointer wieder schließen.

Dies geht, indem wir die fClose-Funktion aufrufen und hier den Zeiger als Argument angeben.

Der Rückgabewert zeigt, ob das Schließen erfolgreich war oder eben nicht.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:07:34 Min

Aufnahmedatum

2020-11-01

Hochgeladen am

2020-11-02 00:07:18

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen